承上一篇內容,我們己經成功利用 Rigidbody 的功能去設計一個角色左右移動的腳本。這次我們將修正一些有可能出現的小問題。
首先,現在的移動程式碼使玩家減速率較為低,這時我們可以同樣利用 Dawnosaur 提供的設計去製作一個阻力系統。先建立一個全域變數:
[SerializeField] private float frictionAmount = 1f;
然後在 FixedUpdate() 的 AddForce() 後方建立以下程式碼:
// 如果玩家沒有輸入移動時,觸發阻力系統
if(Mathf.Abs(inputDirection) < 0.01f)
{
// 避免阻力過大,如果阻力大於速度時,設定阻力為與玩家同等的速度
float applyAmount = Mathf.Min(Mathf.Abs(rb.velocity.x), Mathf.Abs(frictionAmount));
// 把阻力根據玩家當前移動方向去決定阻力要施加的方向
applyAmount = applyAmount * Mathf.Sign(rb.velocity.x) * -1;
rb.AddForce(applyAmount * Vector2.right, ForceMode2D.Impulse);
}
再來,玩家有可能在平地移動時突然被卡住,這可能和場景以及角色的碰撞箱設定有關。場景方面,Tilemap Collider 較容易出現問題,如果沒有斜坡,玩家可以考慮使用多個 Box Collider 進行組合。
如果是有斜坡,可以考慮使用多邊形碰撞器 Polygon Collider。
另外,玩家角色有可能會卡在一些掉下去的角落位置。
可以考慮為角色在腳下位置改用圓形碰撞器,或者整個角色改用膠囊碰撞器。